﻿namespace RobotPerCeption.utils
{
    public class EnumParseUtils
    {

        /// <summary>
        /// 根据枚举类型和键（枚举成员的名称）获取对应的枚举值。
        /// </summary>
        /// <param name="enumType">枚举类型。</param>
        /// <param name="key">枚举成员的名称。</param>
        /// <returns>对应的枚举值，如果未找到则返回枚举类型的默认值。</returns>
        public static object GetEnumValueByKey(Type enumType, string key)
        {
            if (!enumType.IsEnum)
            {
                throw new ArgumentException("The provided type must be an enum.");
            }

            try
            {
                return Enum.Parse(enumType, key);
            }
            catch (ArgumentException)
            {
                // 如果找不到，返回枚举类型的默认值
                return Enum.GetValues(enumType).GetValue(0);
            }
        }

        /// <summary>
        /// 根据泛型枚举类型和键（枚举成员的名称）获取对应的枚举值。
        /// </summary>
        /// <typeparam name="TEnum">泛型枚举类型。</typeparam>
        /// <param name="key">枚举成员的名称。</param>
        /// <returns>对应的枚举值，如果未找到则返回枚举类型的默认值。</returns>
        public static TEnum GetEnumValueByKey<TEnum>(string key) where TEnum : struct, Enum
        {
            Type enumType = typeof(TEnum);
            object enumValue = GetEnumValueByKey(enumType, key);
            return (TEnum)enumValue;
        }



    }
}
